接下來,讓我們來快速複習認識一下 FastAPI~
FastAPI 是一個高效能 (所以才叫 fast) 的 Python 後端框架。除了高效能之外,還有許多優點,包含:
而且,重要的是,它也很好上手,文件很好懂。
FastAPI 作者 tiangolo (Sebastián Ramírez) 在今年 9 月初的時候,有來台灣參加 PyCon 2025 並分享這些開源工具的歷史淵源,包含他的背景、目標以及觀點,而「文件要能容易閱讀」就是其中一個重點。
如果要用一句話來概括 FastAPI 的特色,就是 API 快、開發快、學習快。
首先,請大家先去下載並安裝好 Python。安裝完成後,可以在 terminal 輸入指令查看 Python 版本,以確認一下是否有安裝成功。
python --version
接著,建立一個新的虛擬環境 (非必要) 並安裝 FastAPI
pip install "fastapi[standard]"
安裝完成後,可以輸入 pip list
看一下安裝了哪些東西。這邊安裝的 fastapi
是 0.116.1
版,沒意外的話,接下來這系列文章都會使用這個版本。
如果想要調整安裝的套件,可以參考官網調整安裝指令。
(太長了,截圖就不截全部了)
接著,建立 main.py
# main.py
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
取自官網範例
這段程式碼很短,但已經包含了 FastAPI 的核心概念:
app = FastAPI()
: 建立一個 FastAPI 的實例 (instance),這是我們與框架互動最主要的物件。
@app.get("/")
: 這是一個「路徑操作裝飾器」(Path Operation Decorator)。它告訴 FastAPI,下方緊跟的函式 read_root 負責處理傳送到路徑 /
的 GET 請求。這就是一個 API (應用程式介面) 端點 (endpoint)。
def read_root():
: 這是一個同步 (synchronous) 的路徑操作函式。因為它是用 def 而不是 async def 定義的。關於兩者的差異,在後續章節會深入探討。目前你只需要知道,FastAPI 很聰明,它會自動將同步的函式放到一個獨立的執行緒池 (thread pool) 中運行,避免阻塞主程式。
最後,用這個指令啟動 Server
fastapi dev main.py
這個 fastapi dev
指令是 FastAPI 官方 2024 年新推出的 CLI 工具 (FastAPI CLI),專為開發環境設計。它會啟動一個由 Uvicorn 驅動的伺服器,並且預設開啟 auto-reload 功能,也就是當你修改並儲存 main.py
檔案時,伺服器會自動重啟載入最新的程式碼,非常方便。
fastapi dev vs uvicorn
你可能也會在其他教學文章中看到傳統的
uvicorn main:app --reload
指令 (例如我之前寫的這篇 XD)。uvicorn
是 ASGI 伺服器的名稱,main:app
指的是「執行 main.py 檔案中的 app 物件」,--reload
則是開啟自動重載。
fastapi dev
其實就是幫我們封装了這個指令,讓我們在開發時可以更簡潔地啟動服務。而在生產環境部署時,我們則會直接使用 uvicorn 或搭配 gunicorn (之後會再討論)。
如果有看到這個畫面,就表示啟動成功了~
接下來,可以參考 terminal 的說明,用瀏覽器打開 http://127.0.0.1:8000
,確認是否可以看到我們自己定義的結果。
也可以把網址調整一下,測試另一個 API。
最後,測試一下 auto-reload:簡單的修改 API 並儲存。
@app.get("/")
def read_root():
return {"Hello": "iThome"}
此時再重新一次瀏覽器就可以看到修改後的結果。
FastAPI 最強大的功能之一就是自動文件。請打開瀏覽器,連到 http://127.0.0.1:8000/docs
。
你會看到一個互動式的 API 文件頁面 (Swagger UI),上面清楚列出了我們定義的所有 API 端點、參數、以及回傳格式。你甚至可以直接在頁面上進行 API 的測試!
另外,FastAPI 也提供了另一種風格的文件,你可以訪問 http://127.0.0.1:8000/redoc
看看。
透過今天這個簡單的範例,我們已經成功地建立並運行了一個 FastAPI 服務。在接下來的文章中,我們將會深入探討 Day 1 提到的那些核心觀念問題。